﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DataAccessLayer;
using BusinessLogicLayer;
using System.Globalization;

namespace ChamCong.NhanVien
{
    public partial class XinXetCong : BasePage
    {
        NhanVienBLL nvBLL = new NhanVienBLL();
        CongBLL cBLL = new CongBLL();
        TangCaBLL tcBLL = new TangCaBLL();
        TongCongThangBLL tctBLL = new TongCongThangBLL();
        LoaiCongBLL lcBLL = new LoaiCongBLL();
        XetCongBLL xcBLL = new XetCongBLL();
        TinhThoiGian _tinh = new TinhThoiGian();
        int manv;
        static public int _ttd;
        protected void Page_Load(object sender, EventArgs e)
        {
            manv = Convert.ToInt32(Session["MaNV"]);
            if (Request.QueryString["ttd"] == null)
            {
                NHANVIEN nv = nvBLL.LayNhanVien(manv);
                lbHoTen.Text = nv.HoTen.ToString();
                lbMaNV.Text = manv.ToString();
                if (!IsPostBack)
                {
                    Reset();
                    tbShow.Visible = false;
                    tbXetCongLoad.Visible = true;
                    tbXetCong.Visible = true;
                }
            }
            else
            {
                tbXetCongLoad.Visible = false;
                tbXetCong.Visible = false;
                _ttd = Convert.ToInt32(Request.QueryString["ttd"]);
                bindGridView(_ttd);
                if (!IsPostBack)
                {
                    tbShow.Visible = false;                    
                }
            }
        }

        protected void btnLoad_Click(object sender, EventArgs e)
        {
            if (txtNgay.Text.Trim() == "")
            {
                sbcMsgBox2.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Vui lòng chọn ngày");
            }
            else
            {
                try
                {
                    IFormatProvider format = new CultureInfo("vi-VN");
                    DateTime _ngay = (DateTime)Convert.ToDateTime(txtNgay.Text, format);

                    if (_ngay >= DateTime.Now)
                    {
                        sbcMsgBox2.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Chưa có dữ liệu Chấm Công!");
                        ShowTTCong.Visible = false;
                        goto xong;
                    }

                    int _thang = int.Parse(_ngay.Month.ToString());
                    int _nam = int.Parse(_ngay.Year.ToString());

                    if (tctBLL.KiemTraTongCong(_thang, _nam) == true)
                    {
                        sbcMsgBox2.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Công đã Chốt (không thể thay đổi)!");
                        //lbThongBao.Visible = true;
                        ShowTTCong.Visible = false;
                        goto xong;
                    }

                    lbThongTin.Text = ConvertToDateVN(_ngay.DayOfWeek.ToString().Trim()) + ", ngày " + _ngay.Day.ToString() + " tháng " + _ngay.Month.ToString() + " năm " + _ngay.Year.ToString();

                    if (cBLL.LayCong(manv, _ngay) == null)
                    {
                        ShowTTCong.Visible = true;
                        lbGioDen.Text = "";
                        lbGioVe.Text = "";
                        lbMaCong.Text = "0";
                        lbSoCong.Text = "0";
                    }
                    else
                    {
                        ShowTTCong.Visible = true;
                        CONG a = cBLL.LayCong(manv, _ngay);
                        if (a.GioDen != null)
                        {
                            lbGioDen.Text = String.Format("{0:T}", a.GioDen);    
                        }
                        else
                        {
                            lbGioDen.Text = "Chưa có dữ liệu";
                        }
                        if (a.GioVe != null)
                        {
                            lbGioVe.Text = String.Format("{0:T}", a.GioVe);
                        }
                        else
                        {
                            lbGioVe.Text = "Chưa có dữ liệu";
                        }
                        
                        lbMaCong.Text = a.MaLoaiCong.ToString();
                        lbSoCong.Text = a.SoCong.ToString();

                        drMaCong.SelectedValue = a.SoCong.ToString();
                    }

                    if (tcBLL.LayTC(_ngay, manv) == null)
                    {
                        lbGioTangCa.Text = "0";
                        txtGioTangCa.Text = "0";
                    }
                    else
                    {
                        lbGioTangCa.Text = tcBLL.LayTC(_ngay, manv).ThoiGian.ToString();
                        txtGioTangCa.Text = tcBLL.LayTC(_ngay, manv).ThoiGian.ToString();
                    }

                xong: { }
                    //ShowTTCong.Visible = true;
                }
                catch
                {
                    sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Chú ý!", "Thông tin giờ đến/giờ về còn thiếu.");
                }
            }
        }

        protected void Reset()
        {
            //ShowTTCong.Visible = false;
            lbGioDen.Text = "";
            lbGioVe.Text = "";
            lbMaCong.Text = "";
            lbSoCong.Text = "";
            txtGioTangCa.Text = "";
            txtLyDo.Text = "";
            txtNgay.Text = "";
            ShowTTCong.Visible = false;
        }

        protected string ConvertToDateVN(string date)
        {
            switch(date)
            {
                case "Sunday":
                    return "Chủ Nhật";
                case "Monday":
                    return "Thứ Hai";
                case "Tuesday":
                    return "Thứ Ba";
                case "Wednesday":
                    return "Thứ Tư";
                case "Thursday":
                    return "Thứ Năm";
                case "Friday":
                    return "Thứ Sáu";
                case "Saturday":
                    return "Thứ Bảy";
                default:
                    return "";
            }
        }

        protected void btnGuiYeuCau_Click(object sender, EventArgs e)
        {
            try
            {
                XETCONG x = new XETCONG();


                x.SoCong = Convert.ToDouble(drMaCong.SelectedValue);
                x.MaLoaiCong = lcBLL.LayMaLoaiCong((Double)x.SoCong);
                x.MaNV = manv;

                IFormatProvider format = new CultureInfo("vi-VN");
                x.Ngay = Convert.ToDateTime(txtNgay.Text, format);

                //kiểm tra tồn tại của xin xét công
                if (xcBLL.KiemTraTonTai((int)x.MaNV, (DateTime)x.Ngay) == true)
                {
                    sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Đã tồn tại đơn xét công!");
                }
                else
                {
                    if (txtGioTangCa.Text.Trim() == "" || txtGioTangCa.Text.Trim() == "0")
                    {
                        x.TGTangCa = 0;
                    }
                    else
                    {
                        x.TGTangCa = Convert.ToDouble(txtGioTangCa.Text);
                        x.HeSoTC = _tinh.LayHSTangCa((DateTime)x.Ngay, manv);
                    }
                    x.LyDo = txtLyDo.Text;

                    x.TrangThaiDuyet = 0;
                    xcBLL.Them(x);
                    //Reset();
                    ShowTTCong.Visible = false;
                    sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Gửi thành công");
                }
            }
            catch(Exception ex)
            {
                sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Lỗi: " + ex.Message);
            }
        }

        protected void btnHuy_Click(object sender, EventArgs e)
        {
            Reset();
        }

        public void bindGridView(int _ttd)
        {

            List<XETCONG2> ls0 = xcBLL.LayDSXetCongNV(manv, _ttd);

            if (ls0.Count > 0)
            {
                dgvXetCong0.DataSource = ls0;
                dgvXetCong0.DataBind();
            }
            else
            {
                sbcMsgBox3.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Hiện thời không có dữ liệu!");
            }

        }

        protected void dgvXetCong0_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton imgbtXem = (ImageButton)e.Row.FindControl("imgbtXem0");

                if (imgbtXem != null)
                    imgbtXem.Attributes["Ma"] = e.Row.Cells[0].Text;
            }

            //Đơn xét công chưa đọc thì tô đậm
            if (DataBinder.Eval(e.Row.DataItem, "TrangThaiDoc") == null)
            { }
            else
            {
                int ttd = int.Parse(DataBinder.Eval(e.Row.DataItem, "TrangThaiDoc").ToString());
                if (ttd == 0)
                {
                    e.Row.Attributes.Add("style", "font-weight:bold;");
                }

            }
        }

        protected void imgbtXem0_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton btn = (ImageButton)sender;
                tbShow.Visible = true;
                int ma = int.Parse(btn.Attributes["Ma"]);
                ShowThongTinXetCong(ma);

                if (xcBLL.LayXetCong(ma).TrangThaiDoc == 0)
                {
                    XETCONG x = new XETCONG();
                    x.MaXetCong = ma;
                    x.TrangThaiDoc = 1;

                    xcBLL.Sua(x);

                    bindGridView(_ttd);
                }


                
            }
            catch { }
        }

        protected void ShowThongTinXetCong(int ma)
        {
            tbShow.Visible = true;
            XETCONG a = xcBLL.LayXetCong(ma);
            lbMaCong2.Text = a.MaLoaiCong;
            lbMaNVs.Text = a.MaNV.ToString();
            lbHoTens.Text = a.NHANVIEN.HoTen.ToString();
            lbGioTangCa2.Text = a.TGTangCa.ToString();
            lbHeSo2.Text = a.HeSoTC.ToString();
            txtLyDos.Text = a.LyDo;
            //txtLyDo.Enabled = false;
            lbNgays.Text = String.Format("{0:dd/MM/yyyy}", a.Ngay);

            //txtLyDo.Text = a.LyDo;
            txtChuThich.Text = a.ChuThich;

            DateTime _ngay = a.Ngay.Value;
            int _manv = (int)a.MaNV;

            CONG c = cBLL.LayCong(_manv, _ngay);
            if (c == null)
            {
                lbGioDens.Text = "";
                lbGioVes.Text = "";
                lbSoCongs.Text = "0";
                lbMaCongs.Text = "0";
            }
            else
            {
                lbGioDens.Text = String.Format("{0:T}", c.GioDen);
                lbGioVes.Text = String.Format("{0:T}", c.GioVe);
                lbSoCongs.Text = c.SoCong.ToString();
                lbMaCongs.Text = c.MaLoaiCong;
            }

            TANGCA t = tcBLL.LayTC(_ngay, _manv);
            if (t == null)
                lbGioTangCas.Text = "";
            else
                lbGioTangCas.Text = t.ThoiGian.ToString();
        }

        protected void dgvXetCong0_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            dgvXetCong0.PageIndex = e.NewPageIndex;
            bindGridView(_ttd);
        }

    }
}